var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var beforeApp = require(path.join(__dirname, 'lib/callbing.js'))
beforeApp.loadImage()

global.model = require(path.join(__dirname, 'databases/database.js'));
global.util = require(path.join(__dirname, 'lib/response.js'));

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser("codefinger"));
app.use(express.static(path.join(__dirname, 'public')));


var fs = require("fs")
var route = path.join(__dirname, "routes")
 
var pa = fs.readdirSync(route);
pa.forEach(function(ele,index){
  let scan = path.join(route, ele)
  var info = fs.statSync(scan)
  if(info.isFile()) {
    middleRegister(scan)
    routerRegister(scan)
  }
})

function middleRegister(routerPath) {
  var m = require(routerPath)
  if(m.type == "prefix") {
    app.use(m.prefix, m.beforeRoute)
  }
}

function routerRegister(routerPath) {
  var m = require(routerPath)
  if(m.type == "router") {
    m.locations.forEach(location => {
      app.use(location.path, location.router)
    })
  }
}

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;
